package com.cd.dao;

import com.cd.entity.Student;
import com.cd.util.DBUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 类名：
 * 作者：WF
 * 功能：
 */
public class StudentDAO {
	// 1. 查询所有学生信息
	public List<Student>   findAll() throws SQLException {
		// 1.0 定义一个空集合
		List<Student> students = new ArrayList<>();
		// 1.1 获取连接对象
		Connection conn = DBUtil.getConn();
		// 1.2 通过连接获取命令对象
		Statement statement = conn.createStatement();
		// 1.3 通过命令对象执行SQL语句，得到结果集
		ResultSet rs = statement.executeQuery("select * from students");
		// 1.4 将结果集转换为集合
		while (rs != null && rs.next()) {
			// 1.4.1 从结果集中取得数据
			Long sid = rs.getLong("sid");
			String sname = rs.getString("sname");
			String sex = rs.getString("sex");
			Integer age = rs.getInt("age");
			String addr = rs.getString("addr");
			// 1.4.2 用上面得到的结果集数据去构造学生对象
			Student student = new Student(sid,sname,sex,age,addr);
			// 1.4.3 将学生对象添加到集合中
			students.add(student);
		}
		// 1.5 关闭资源
		DBUtil.close(conn, rs, statement);
		// 1.6 返回集合、
		return students;
	}

	// 2. 添加学生
	public void add(Student stud) throws SQLException {
		// 2.1 得到连接对象
		Connection conn = DBUtil.getConn();
		// 2.2 创建Statement对象
		String sql = "insert into students values(?,?,?,?,?)";
		PreparedStatement ps = conn.prepareStatement(sql);
		// 2.3 为占位符赋值
		ps.setLong(1,stud.getSid());
		ps.setString(2, stud.getSname());       // 姓名
		ps.setString(3,stud.getSex());          // 性别
		ps.setInt(4,stud.getAge());             // 年龄
		ps.setString(5,stud.getAddr());         // 住址
		// 2.4 执行SQL语句 (执行增、删、改语句)
		ps.executeUpdate();
		// 2.5 关闭资源
		DBUtil.close(conn, null, ps);
	}

	//3. 修改学生
	public void update(Student stud) throws SQLException {
		// 3.1 得到连接
		Connection conn = DBUtil.getConn();
		// 3.2 创建Statement对象
		String sql = "update students set sname=?,sex=?,age=?,addr=? where sid=?";
		PreparedStatement ps = conn.prepareStatement(sql);
		// 3.3 为占位符赋值
		ps.setString(1,stud.getSname());
		ps.setString(2,stud.getSex());
		ps.setInt(3,stud.getAge());
		ps.setString(4,stud.getAddr());
		ps.setLong(5,stud.getSid());
		// 3.4 执行命令
		ps.executeUpdate();
		// 3.5 关闭资源
		DBUtil.close(conn, null, ps);
	}

	//4. 根据学号查询单个学生
	public Student findById(Long sid) throws SQLException {
		Student student = null;
		// 4.1 得到连接对象
		Connection conn = DBUtil.getConn();
		// 4.2 创建命令对象并为点位符赋值
		PreparedStatement ps = conn.prepareStatement("select * from students where sid = ?");
		ps.setLong(1, sid);
		// 4.3 执行命令，得到结果集
		ResultSet rs = ps.executeQuery();
		// 4.4 将结果集转换为学生对象
		if(rs.next()){
			String sname = rs.getString("sname");
			String sex = rs.getString("sex");
			int age = rs.getInt("age");
			String addr = rs.getString("addr");
			student = new Student(sid, sname,sex, age,addr);
		}
		// 4.5 关闭数据库连接
		DBUtil.close(conn, rs, ps);
		return student;
	}

	//5. 删除学生信息
	public void delete(Long sid) throws SQLException {
		// 5.1 获取连接对象
		Connection conn = DBUtil.getConn();
		// 5.2 创建Statement对象并为占位符赋值
		PreparedStatement ps = conn.prepareStatement("delete from students where sid = ?");
		ps.setLong(1,sid);
		// 5.3 执行SQL语句
		ps.executeUpdate();
		// 5.4 关闭数据库连接
		DBUtil.close(conn, null, ps);
	}
}
